package com.xlh.service.system;

import com.xlh.dto.system.IconDTO;
import com.xlh.dto.system.ValueDTO;
import com.xlh.enums.LocalResourcesEnum;
import com.xlh.enums.PermissionEnum;
import com.xlh.enums.SystemConfigEnum;
import com.xlh.pojo.system.Permission;
import com.xlh.pojo.system.SystemConfig;

import java.util.List;
import java.util.Map;

/**
 * 系统配置
 * <p>
 * Created by lx on 2019/1/28.
 */
public interface SystemConfigService {

    /**
     * 根据id、配置枚举获取配置文件内容
     *
     * @param configIds  配置文件的id集合
     * @param configEnum 枚举
     * @return
     */
    List<SystemConfig> listConfig(List<Integer> configIds, SystemConfigEnum configEnum);

    /**
     * 根据key的集合获取数据
     *
     * @param keys 关键字集合
     * @return
     */
    List<SystemConfig> listConfigByKeys(List<String> keys);

    /**
     * 根据keyword获取value信息
     *
     * @param keys 关键字集合
     * @return
     */
    Map<String, List<ValueDTO>> listConfigByKey(List<String> keys);

    /**
     * 将数据的图标进行配置
     *
     * @param data          数据
     * @param resourcesEnum 资源枚举
     * @param <T>
     * @return
     */
    <T extends IconDTO> List<T> convertIcon(List<T> data, LocalResourcesEnum resourcesEnum);

    /**
     * 修改系统参数
     *
     * @param systemConfigEnum 关键字枚举
     * @param value            修改的value值
     */
    void updateSystemConfig(SystemConfigEnum systemConfigEnum, String value);

    /**
     * 查询权限控制
     *
     * @param objs           查询对象id集合
     * @param permissionEnum 权限控制枚举
     * @return
     */
    List<Permission> queryPermission(List<Long> objs, PermissionEnum permissionEnum);

    /**
     * 用户集合都按照某些状态进行插入或修改权限
     *
     * @param userIds        用户id集合
     * @param status         权限状态码值 或 状态的id
     * @param permissionEnum 权限枚举
     */
    void insertOrUpdatePermission(List<Long> userIds, List<Integer> status, PermissionEnum permissionEnum);

    void insertOrUpdatePermission(List<Permission> permissions);

    /**
     * 批量删除权限
     *
     * @param ids 权限id集合
     */
    void deletePermission(List<Long> ids);

    void deletePermissionByObjIds(List<Long> objIds, PermissionEnum permissionEnum);

    /**
     * 插入系统配置
     *
     * @param config 插入数据
     */
    void insertSystemConfig(SystemConfig config);

    /**
     * 清库
     */
    void cleanDB();

}
